package main

import "fmt"

/*
*
方法
Go语言中有同时有函数和方法
一个方法就是一个包含了接受者的函数，接受者可以是任何命名类型（接口类型除外）或者结构体类型的一个值或者是一个指针
给定类型的所有方法属于该类的方法集

方法的声明语法

	func (variable_name variable_data_type) function_name()[return_type]{
		// 方法体
	}

方法 function_name() 在 （variable_name variable_data_type）这个变量上做工作
//(variable_name variable_data_type) 是接收者


实际上，除了结构体类型之外，可以为任意类型（接口类型除外）添加方法
在 GO 语言中，接受者的类型可以是任意类型，不仅仅是机构体，任何类型都可以拥有方法（接口类型除外）
例子：
package main

import (
	"fmt"
)

//MyInt 将int定义为自定义MyInt类型
type MyInt int

//SayHello 为MyInt添加一个SayHello的方法
func (m MyInt) SayHello() {
	fmt.Println("Hello, 我是一个int。")
}
func main() {
	var m1 MyInt
	m1.SayHello() //Hello, 我是一个int。
	m1 = 100
	fmt.Printf("%#v  %T\n", m1, m1) //100  main.MyInt
}

*/

type Circle struct {
	radius float64
}

func (c Circle) area() float64 {
	return 3.14 * c.radius * c.radius
}

// 如果想要修改结构体属性的值就需要使用指针作为接收者
func (c *Circle) setRadius(radius float64) {
	c.radius = radius
}

// 这个操作将不会修改结构体的属性值。
//
//	func (c Circle) setRadius(radius float64) {
//		c.radius = radius
//	}
func main() {

	var c1 Circle
	c1.radius = 10
	fmt.Println("圆的面积是：", c1.area())

}
